/**
 * Title:CallRecordMapper<br>
 * Description:通话记录DAL接口<br>
 * Copyright © Xiamen Dripstill  NetWorks Co.,Ltd.
 * @Create:2020-02-10<br>
 * @author:Sun Yijing<br>
 * @version: Object v1.0.0<br>
 * <br>
 * 修改历史:<br>
 * 修改人		修改日期		修改描述<br>
 * -----------------------------------<br>
 * <br>
 * <br>
 */
package com.yoooya.base.dao.call;

import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.yoooya.base.dao.DalMapper;
import com.yoooya.base.model.po.call.CallRecordPo;
import com.yoooya.base.model.qo.call.CallRecordQo;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

@DalMapper
public interface CallRecordMapper {
    /**
     * 根据条件查询记录集(不分页)
     *
     * @param qo 条件查询对象
     * @return 返回查询列表
     * @throws Exception
     */
    List<CallRecordPo> query(@Param("qo") CallRecordQo qo) throws Exception;

    /**
     * 根据条件查询记录集(采用Paginator组件进行分页)
     *
     * @param qo 条件查询对象
     * @param pageBounds 组件分页对象
     * @return 返回查询列表
     * @throws Exception
     */
    List<CallRecordPo> query(@Param("qo") CallRecordQo qo, PageBounds pageBounds) throws Exception;

    /**
     * 根据主键查询记录
     *
     * @param id 主键ID
     * @return 返回查询对象
     * @throws Exception
     */
    CallRecordPo queryById(Long id) throws Exception;

    /**
     * 根据条件查询记录总数
     *
     * @param qo 条件查询对象
     * @return 返回统计记录
     * @throws Exception
     */
    int count(@Param("qo") CallRecordQo qo) throws Exception;

    /**
     * 根据主键删除记录
     *
     * @param id 
     * @return 返回删除结果
     * @throws Exception
     */
    int deleteById(Long id) throws Exception;

    /**
     * 根据ID列表批量删除记录
     *
     * @param ids ID列表
     * @return 返回删除结果
     * @throws Exception
     */
    @Delete("delete from CallRecord where id in (${ids})")
    int deleteByBatch(@Param("ids") String ids) throws Exception;

    /**
     * 保存记录,不管记录里面的属性是否为空
     *
     * @param record 插入记录
     * @return 返回插入结果
     * @throws Exception
     */
    int insert(CallRecordPo record) throws Exception;

    /**
     * 根据主键更新属性不为空的记录
     *
     * @param record 更新记录对象
     * @return 返回更新结果
     * @throws Exception
     */
    int updateById(CallRecordPo record) throws Exception;

    /**
     * 根据主键批量更新属性不为空的记录
     *
     * @param ids 更新ID列表
     * @param record 更新记录对象
     * @return 返回更新结果
     * @throws Exception
     */
    @Update("update CallRecord set createTime=#{record.createTime} where id in (${ids})")
    int updateByBatch(@Param("ids") String ids, @Param("record") CallRecordPo record) throws Exception;

    /**
     * 批量修改状态
     *
     * @param ids 更新ID列表
     * @param status 批量修改状态
     * @return 返回更新结果
     * @throws Exception
     */
    @Update("update CallRecord set status=#{status} where id in (${ids})")
    int updateStatusByBatch(@Param("ids") String ids, @Param("status") Integer status) throws Exception;
}